#pragma warning disable 108
using System;
using System.Runtime.InteropServices;
using System.Collections.Generic;
using Cephei;
using Cephei.Generic;
using Cephei.QL.Models.Marketmodels;
namespace Cephei.QL.Models.Marketmodels.Curvestates
{
     // <summary> 
	// ! This class stores the state of the yield curve associated to the fixed calendar times within the simulation. This is the workhorse discounting object associated to the rate times of the simulation. It's important to pass the rates via an object like this to the product rather than directly to make it easier to switch to other engines such as a coterminal swap rate engine. Many products will not need expired rates and others will only require the first rate.
	// </summary>
    [Guid ("8CA36089-3273-4334-8961-2824D5C0BFD4"),ComVisible(true)]
	public interface ICoterminalSwapCurveState : Cephei.QL.Models.Marketmodels.ICurveState
	{
		///////////////////////////////////////////////////////////////
        // Methods
        //
        
		 Double CmSwapAnnuity(UInt64 numeraire, UInt64 i, UInt64 spanningForwards);
        
		 Double CmSwapRate(UInt64 i, UInt64 spanningForwards);
        
		 Cephei.IVector<Double> CmSwapRates(UInt64 spanningForwards);
        
		 Double CoterminalSwapAnnuity(UInt64 numeraire, UInt64 i);
        
		 Double CoterminalSwapRate(UInt64 i);
        
		 Cephei.IVector<Double> CoterminalSwapRates {get;}
        
		 Double DiscountRatio(UInt64 i, UInt64 j);
        
		 Double ForwardRate(UInt64 i);
        
		 Cephei.IVector<Double> ForwardRates {get;}
        
		 ICoterminalSwapCurveState SetOnCoterminalSwapRates(Cephei.IVector<Double> swapRates, Microsoft.FSharp.Core.FSharpOption<UInt64> firstValidIndex);
    }

    // <summary> 
	// ! This class stores the state of the yield curve associated to the fixed calendar times within the simulation. This is the workhorse discounting object associated to the rate times of the simulation. It's important to pass the rates via an object like this to the product rather than directly to make it easier to switch to other engines such as a coterminal swap rate engine. Many products will not need expired rates and others will only require the first rate. Factory
	// </summary>
   	[ComVisible(true)]
    public interface ICoterminalSwapCurveState_Factory // : Collection_Factory<ICoterminalSwapCurveState, ICell<ICoterminalSwapCurveState>>
    {
        ///////////////////////////////////////////////////////////////
        // Factory methods
        //
        
	    ICoterminalSwapCurveState Create (Cephei.IVector<Double> rateTimes);
    }
}

